/*
 * token.cpp
 *
 *  Created on: 06/10/2012
 *      Author: wx
 */

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#include "token.h"

token::token(string nom, int line, int coluna) {
	this->classe = 0;
	this->linha = line;
	this->nome = nom;
	this->coluna = coluna;
}
token::token() {
	this->classe = 0;
	this->linha = 0;
	this->coluna = 0;
	this->nome = "";
}
/////////////
void token::setClasse(int classe) {
	this->classe = classe;
}

int token::getClasse() {
	return (this->classe);
}
//////////
void token::setLinha(int linha) {
	this->linha = linha;
}

int token::getLinha() {
	return (this->linha);
}

void token::setNome(string nome) {
	this->nome = nome;
}

string token::getNome() {
	return (this->nome);
}

void token::setCol(int coluna) {
	this->coluna = coluna;
}

int token::getCol() {
	return (this->coluna);
}

string token::classetostring() {
	switch (classe) {
	case 1:
		return "palavra_reservada";
	case 2:
		return "inteiro";
	case 3:
		return "real";
	case 4:
		return "identificador";
	case 5:
		return "simbsimples";
	case 6:
		return "simbduplo";
	case 0:
		return "desconhecido";
	}

	return "0";
}

void token::stringtoclasse(string classe) {
	//
	if (classe == "palavra_reservada") {
		this->classe = 1;
	}
	if (classe == "inteiro") {
		this->classe = 2;
	}
	if (classe == "real") {
		this->classe = 3;
	}
	if (classe == "identificador") {
		this->classe = 4;
	}
	if (classe == "simbsimples") {
		this->classe = 5;
	}
	if (classe == "simbduplo") {
		this->classe = 6;
	}
	if (classe == "desconhecido") {
		this->classe = 0;
	}
}

void token::print() {
	cout << "token: " << endl;
	cout << "classe: " << this->classetostring() << " nome: " << nome
			<< " linha: " << linha << " coluna: " << coluna << endl;

}

string token::sprint() {
	string temp = "";
	char temp2[32];

	temp += "token: ";
	temp += "classe: ";
	temp.append(this->classetostring());
	temp += " nome: ";
	temp.append(nome);
	temp += " linha: ";
	sprintf(temp2, "%d", linha);
	temp.append(temp2);
	temp += " coluna: ";
	sprintf(temp2, "%d", coluna);
	temp.append(temp2);

	return temp;
}

bool token::nomeigual(token amostra) {
	if (this->nome == amostra.nome) {
		return true;
	} else
		return false;
}
bool token::nomeigual(string amostra) {
	if (this->nome == amostra) {
		return true;
	} else
		return false;
}

